<?php
class tviewpage
{
///////////////////////////////////////////////////////////////
var $Table; //表名
var $MaxLine=15;   //每页显示行数
var $Offset;   //记录偏移量
var $Total;  //记录总数
var $Number; //本页读取的记录数
var $Result; //读出的结果
var $TPages; //总页数
var $CPages; //当前页数
var $Condition; //数据库搜索条件
var $PageQuery; //分页显示要传递的参数
var $strQuery;
/*设置导航条翻页提示符*/
var $strPageFirst =' 首页';
var $strPagePrev =' 上页';
var $strPageNext =' 下页';
var $strPageLast =' 末页';
/*设置导航条翻页(未激活状态)提示符,如果不设置，导航条将不区别显示激活与否,本
项配合图形可获得最佳效果*/

var $strDispPageFirst;
var $strDispPagePrev;
var $strDispPageNext;
var $strDispPageLast;
///////////////////////////////////////////////////////////////


/*属性定义之后是类的构造函数:*/

///////////////////////////////////////////////////////////////
//构造函数
//参数:表名、最大行数、偏移量
function tviewpage($TB,$ML,$OF)
{
$this->Table = $TB;
$this->MaxLine = $ML;
$this->Offset = (floor($OF/$ML))*$ML;
}

///////////////////////////////////////////////////////////////
/*构造函数接受3个参数：表名，记录最大数和开始显示的偏移量，以后就
可以随时用new关键字来构造tviewpage对象。

构造函数之后是类的属性设置函数: */
///////////////////////////////////////////////////////////////

//设置显示条件
//如: where id="$id" order by id desc
//要求是字串，符合sql语法(本字串加在sql语句后)

function setCondition($s)
{
$this->Condition = $s;
//echo $this->Condition
}

//设置传递参数
//key 参数名 value 参数值
//如: setpagequery("id",$id);如果多个参数要传递，可多次调用本函数

function setPageQuery($key,$value)
{
$tmp[key]=$key;
$tmp[value]=$value;
$this->PageQuery[]=$tmp;
}

//设置导航条分页显示的字符或图形
//如：首页或<img src=first.gif align=absmiddle>等.
//要求是字串，符合html语法显示的要求
//如果不设置，导航条使用默认字符


function setPageFirst($s,$sd="")
{
$this->strPageFirst=$s;
$this->strDispPageFirst=$sd;
}

function setPagePrev($s,$sd="")
{
$this->strPagePrev=$s;
$this->strDispPagePrev=$sd;
}

function setPageNext($s,$sd="")
{
$this->strPageNext=$s;
$this->strDispPageNext=$sd;
}

function setPageLast($s,$sd="")
{
$this->strPageLast=$s;
$this->strDispPageNext=$sd;
}

///////////////////////////////////////////////////////////////
/*最后是类的一些功能实现函数:*/
//读取记录
//主要工作函数，根据所给的条件从表中读取相应的记录
//返回值是一个二维数组，result[记录号][字段号]

function getRecords()
{

$SQL = "SELECT count(*) AS total FROM ".$this->Table." ".$this->Condition;
mysql_query("Set Names 'utf-8' ");
$result = mysql_query($SQL) or die(mysql_error());
$row = mysql_fetch_array($result);

$this->Total=$row["total"];
$this->TPages=ceil($this->Total/$this->MaxLine);
$this->CPages=$this->Offset/$this->MaxLine+1;

if($this->Total>0)
{
$SQL="SELECT * FROM ".$this->Table." ".$this->Condition." LIMIT ".$this->Offset." , ".$this->MaxLine;
//上面sql语句没有执行；所以加下面一行执行语句；
mysql_query("Set Names 'utf-8' ");
$result = mysql_query($SQL) or die(mysql_error());
$this->Number = mysql_num_rows($result);
while($row=mysql_fetch_Array($result))
     $this->Result[]= $row;
}
return $this->Result;

}


//显示页码，页数
//显示单前页及总页数，参数s指定不同的显示风格，可以不指定

function getPages($s=0)
{
switch($s)
{
case 90:
   return $this->CPages;
   break;
case 91:
   return $this->TPages;
   break;
default:
   return "第".$this->CPages."页/共".$this->TPages."页";
}
}

//显示总记录数量
//显示当前页及总页数

function getTotal()
{
return $this->Total;
}

//接受用户输入每页显示记录数
//$type=1 为下拉菜单输入，可让用户在imin~imax之间选择。
//如果单独使用此类方法(函数),请在调用此类方法时配套加入
//<form>元素及提交按钮，action可以用$php_self值。

function inputPageLines($Type=0,$iMin=1,$iMax=30)
{
if($Type==1)
{
echo '<select name=pageline>';
for($i=$iMin;$i<=$iMax;$i++)
{
if($i==$this->MaxLine)
{
	echo '<option value='.$i.'selected>'.$i.'</option>';
}
else
{
	echo '<option value='.$i.'>'.$i.'</option>';
}
}
echo '</select>';
}
else
echo '<input type=text size=2 maxlength=3 name=pageline value='.$this->MaxLine.'>';
}

//接受用户选择页码
//如果单独使用词类方法(函数),请在调用此类方法时配套加入
//<form>元素及提交按钮，action可以用$php_self值。

function selectPage()
{
if($this->TPages>1)
{
echo '<select size=1 name=offset >';
for($i=0;$i<$this->TPages;$i++)
{
if($this->Offset ==($i)*$this->MaxLine)
{
echo '<option value=?qq='.($i*$this->MaxLine).' selected>第'.($i+1).'页</option>';
}
else
{
echo '<option value='.($i*$this->MaxLine).'>第'.($i+1).'页</option>';
}
}
echo '</select>';
$k = count($this->PageQuery);
for($i=0;$i<$k;$i++)
{
echo '<input type=hidden name='.$this->PageQuery[$i][key].' Value='.$this->PageQuery[$i][value].'>';
}
}
}


//显示导航按钮或文字
//显示首页、下页、上页、末页，并加上要传递的参数

function showNavigator()
{
$outstr='';
$first=0;
$next=$this->Offset+$this->MaxLine;
$prev=$this->Offset-$this->MaxLine;
$last=($this->TPages-1)*$this->MaxLine;

$k=count($this->PageQuery);
$strQuery="";//生成一个要传递参数字串
for($i=0;$i<$k;$i++)
{
$strQuery.="&".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];
}

if($this->Offset>=$this->MaxLine)
{
$outstr.="<a href=$PHP_SELF?offset=".$first."&pageline=".$this->MaxLine.$strQuery.">".$this->strPageFirst."</a>|";
}
else
$outstr.=$this->strPageFirst."|";
if($prev>=0)
{
$outstr.="<a href=$PHP_SELF?offset=".$prev."&pageline=".$this->MaxLine.$strQuery.">".$this->strPagePrev."</a>|";
}
else
$outstr.=$this->strPagePrev."|";

if($next<$this->Total)
{
$outstr.="<a href=$PHP_SELF?offset=".$next."&pageline=".$this->MaxLine.$strQuery.">".$this->strPageNext."</a>|";
}
else
$outstr.=$this->strPageNext."|";

if($this->TPages!=0 && $this->CPages<$this->TPages)
{
$outstr.="<a href=$PHP_SELF?offset=".$last."&pageline=".$this->MaxLine.$strQuery.">".$this->strPageLast."</a>";
}
else
$outstr.=$this->strPageLast;

return $outstr;
}

//分页显示的全部功能
//提供一个整合的解决方案，没有特殊要求的话，直接用它就行了。

function showFullFunc($barBgcolor="")
{
echo '<table cellspacing=0 sellpadding=0 border=0>';
echo '<form action="'.$PHP_SELF.'" method="post">';
echo '<tr bgcolor="'.$barBgcolor.'">';
echo '<td >';
echo $this->getPages().'';
echo $this->showNavigator().'';
echo '</td>';
//echo '<td >';
//echo '每页';
//$this->inputPageLines(1);
//echo '行';
//if($this->TPages>1)
//echo '/直接跳转到';
//$this->selectPage();
//echo '<input type=submit value="reset">';
//echo '&nbsp;</td>';
echo '</tr></form></table>';
}
}
?>